#include "ui_menu.h"
#include "lvgl/lvgl.h"
// 定义页面数量
#define PAGE_NUM 5

// 全局变量
static lv_obj_t *slider;         // 滑动视图容器
static lv_obj_t *main_cont;      // 主页面容器
static lv_obj_t *page_indicator; // 页面指示器
static uint8_t current_page = 0; // 当前页面索引

/**
 * @brief 更新页面指示器
 */
static void update_indicator(void)
{
    lv_label_set_text_fmt(page_indicator, "%d/%d", current_page + 1, PAGE_NUM);
}

/**
 * @brief 滑动结束事件处理
 * @param e 事件对象
 */
static void scroll_end_handler(lv_event_t *e)
{
    lv_event_code_t code = lv_event_get_code(e);
    if (code == LV_EVENT_SCROLL_BEGIN)
    {
        return;
    }
    if (code == LV_EVENT_SCROLL_END)
    {
        // // 获取当前滚动位置
        lv_coord_t scroll_x = lv_obj_get_scroll_x(main_cont);
        LV_LOG_USER("Scroll X: %d", scroll_x);

        // // 计算当前页面索引
        lv_coord_t page_width = lv_obj_get_width(lv_screen_active());
        uint8_t new_page = (scroll_x + page_width / 2) / page_width;
        // LV_LOG_USER("New Page: %d", page_width);

        LV_LOG_USER("Next Page:%d -> %d", new_page, current_page);

        // 确保页面索引在有效范围内
        if (new_page >= PAGE_NUM)
            new_page = PAGE_NUM - 1;

        // 如果页面发生变化，使用动画滚动到新页面
        if (new_page != current_page)
        {
            current_page = new_page;
            lv_obj_scroll_to_view(lv_obj_get_child(main_cont, current_page), LV_ANIM_ON);
            update_indicator();
        }
        else
        {
            // 如果没有变化，也确保正确的位置
            lv_obj_scroll_to_view(lv_obj_get_child(main_cont, current_page), LV_ANIM_ON);
        }

        return;
    }
}

static void create_grid_layout(lv_obj_t * parent) 
{ 
    // 1. 定义网格列和行的描述 
    static lv_coord_t col_dsc[] = { 
        LV_GRID_FR(1),  // 第1列：占1份（均分宽度）
        LV_GRID_FR(1),  // 第2列：占1份 
        LV_GRID_FR(1),  // 第3列：占1份 
        LV_GRID_TEMPLATE_LAST  // 结束标记 
    }; 
    static lv_coord_t row_dsc[] = { 
        LV_GRID_CONTENT,  // 第1行：高度根据内容自动调整 
        LV_GRID_CONTENT,  // 第2行：同上 
        LV_GRID_CONTENT,  // 第3行：同上 
        LV_GRID_CONTENT,  // 第4行：同上 
        LV_GRID_CONTENT,  // 第5行：同上 
        LV_GRID_CONTENT,  // 第6行：同上 
        LV_GRID_CONTENT,  // 第7行：同上 
        LV_GRID_CONTENT,  // 第8行：同上 
        LV_GRID_CONTENT,  // 第9行：同上 
        LV_GRID_CONTENT,  // 第10行：同上 
        LV_GRID_TEMPLATE_LAST  // 结束标记 
    }; 
 
    // 2. 创建父容器（网格容器）
    lv_obj_t *list_parent = lv_obj_create(parent);  // 父容器为当前屏幕 
    lv_obj_set_size(list_parent, LV_PCT(90), LV_PCT(80));  // 父容器大小：占屏幕90%宽、80%高
    lv_obj_center(list_parent);  // 父容器居中显示 
    lv_obj_set_grid_dsc_array(list_parent, col_dsc, row_dsc);  // 应用网格描述 
    lv_obj_add_flag(list_parent, LV_OBJ_FLAG_SCROLLABLE);  // 开启滚动功能（内容超出时可滚动）
    lv_obj_set_scroll_dir(list_parent, LV_DIR_VER);  // 滚动方向：垂直滚动 
 
    // 3. 循环创建子项（10行×5列） 
    for (int row = 0; row < 10; row++) {  // 10行 
        for (int col = 0; col < 3; col++) {  // 5列
            // 创建子项（以按钮为例，可替换为标签、图标等） 
            lv_obj_t *item = lv_btn_create(list_parent); 
            lv_obj_set_size(item, LV_SIZE_CONTENT, LV_SIZE_CONTENT);  // 子项大小：根据内容调整 
            lv_obj_set_style_pad_all(item, 10, 0);  // 子项内边距：10px 
 
            // 添加文本标签（显示子项信息）
            lv_obj_t *label = lv_label_create(item); 
            lv_label_set_text_fmt(label, "Row %d\nCol %d", row+1, col+1);  // 文本内容：行号+列号 
            lv_obj_center(label);  // 标签居中显示 
 
            // 将子项放入网格的指定单元格（行row，列col）
            lv_obj_set_grid_cell(
                item,               // 子项对象 
                LV_GRID_ALIGN_CENTER,  // 水平对齐：居中 
                col,                // 列位置：第col列（0开始）
                1,                  // 列跨度：占1列 
                LV_GRID_ALIGN_CENTER,  // 垂直对齐：居中 
                row,                // 行位置：第row行（0开始）
                1                   // 行跨度：占1行 
            ); 
        } 
    } 
}
/**
 * @brief 创建页面内容
 * @param parent 父对象
 * @param index 页面索引
 */
static void create_page(lv_obj_t *parent, int index)
{
    // 创建页面对象
    lv_obj_t *page = lv_obj_create(parent);
    lv_obj_set_size(page, LV_PCT(100), LV_PCT(100));
    // lv_obj_set_style_bg_opa(page, LV_OPA_TRANSP, LV_PART_MAIN);
    lv_obj_set_style_border_opa(page, LV_OPA_TRANSP, LV_PART_MAIN);
    lv_obj_set_style_shadow_opa(page, LV_OPA_TRANSP, LV_PART_MAIN);
    lv_obj_clear_flag(page, LV_OBJ_FLAG_SCROLLABLE);

    lv_obj_t *bg_img = lv_img_create(page); // 创建图片控件=
    LV_IMG_DECLARE(zuomian);                          // 声明图片资源（需提前转换）
    lv_img_set_src(bg_img, &zuomian);                 // 设置图片源
    // lv_obj_set_size(bg_img, LV_HOR_RES, LV_VER_RES);    // 铺满屏幕
    lv_obj_set_size(bg_img, LV_PCT(100), LV_PCT(100)); // 铺满屏幕
    lv_obj_align(bg_img, LV_ALIGN_CENTER, 0, 0);        // 对齐左上角

    lv_obj_t * list = lv_list_create(page); // 创建列表控件
    lv_obj_set_size(list, LV_PCT(80), LV_PCT(80)); // 设置列表大小
    lv_obj_center(list);                        // 居中对齐

    lv_list_add_text(list, "This is a list"); // 添加文本项
    for (int i = 0; i < 6; i++)
    {
        // lv_list_add_btn(list, LV_SYMBOL_FILE, "List item");
        lv_list_add_text(list, "List item ");
    }
    // lv_obj_t * btn = lv_btn_create(page); 
    // lv_obj_set_style_bg_color(btn, lv_color_hex(0x07E0 ), LV_PART_MAIN | LV_STATE_PRESSED);
    // lv_obj_align(btn, LV_ALIGN_BOTTOM_LEFT, 0, 0);        // 对齐左上角

    // 创建页面编号标签
    // lv_obj_t *label = lv_label_create(page);
    // lv_label_set_text_fmt(label, "Page %d", index + 1);
    // lv_obj_set_style_text_font(label, &lv_font_montserrat_16, LV_PART_MAIN);
    // lv_obj_center(label);
}

/**
 * @brief 创建滑动菜单界面
 */
void create_sliding_menu(void)
{
    // 获取屏幕尺寸
    lv_coord_t screen_width = lv_obj_get_width(lv_screen_active());
    lv_coord_t screen_height = lv_obj_get_height(lv_screen_active());

    // 创建主页面容器
    main_cont = lv_obj_create(lv_screen_active());
    lv_obj_set_size(main_cont, screen_width, screen_height);
    lv_obj_set_style_bg_opa(main_cont, LV_OPA_TRANSP, LV_PART_MAIN);
    lv_obj_set_style_border_opa(main_cont, LV_OPA_TRANSP, LV_PART_MAIN);
    lv_obj_set_flex_flow(main_cont, LV_FLEX_FLOW_ROW);
    lv_obj_set_flex_align(main_cont, LV_FLEX_ALIGN_START, LV_FLEX_ALIGN_START, LV_FLEX_ALIGN_START);
    lv_obj_clear_flag(main_cont, LV_OBJ_FLAG_SCROLL_ELASTIC);   // 禁用弹性滚动
    lv_obj_set_scroll_snap_x(main_cont, LV_SCROLL_SNAP_CENTER); // 设置中心对齐吸附

    create_grid_layout(main_cont);

    // 创建页面
    for (int i = 0; i < PAGE_NUM; i++)
    {
        create_page(main_cont, i);
    }

    // 添加滚动结束事件监听
    lv_obj_add_event_cb(main_cont, scroll_end_handler, LV_EVENT_SCROLL_BEGIN, NULL);
    lv_obj_add_event_cb(main_cont, scroll_end_handler, LV_EVENT_SCROLL_END, NULL);

    // 创建页面指示器
    page_indicator = lv_label_create(lv_screen_active());
    lv_obj_align(page_indicator, LV_ALIGN_BOTTOM_RIGHT, -20, -20);
    lv_obj_set_style_text_color(page_indicator, lv_color_white(), LV_PART_MAIN);
    lv_obj_set_style_bg_color(page_indicator, lv_color_black(), LV_PART_MAIN);
    lv_obj_set_style_bg_opa(page_indicator, LV_OPA_50, LV_PART_MAIN);
    lv_obj_set_style_pad_all(page_indicator, 10, LV_PART_MAIN);
    lv_obj_set_style_radius(page_indicator, 5, LV_PART_MAIN);
    update_indicator();

    // 初始滚动到第一页
    lv_obj_scroll_to_view(lv_obj_get_child(main_cont, 0), LV_ANIM_OFF);
}